package com.hmall.item.service.impl;


import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hmall.feign.pojo.PageDTO;
import com.hmall.item.constant.MqConstant;
import com.hmall.item.mapper.ItemMapper;
import com.hmall.item.pojo.Item;
import com.hmall.item.service.IItemService;


import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

@Service
public class ItemService extends ServiceImpl<ItemMapper, Item> implements IItemService {
    @Resource
    private ItemMapper itemMapper;

    @Resource
    private RabbitTemplate rabbitTemplate;

    /**
     * 分页查询  利用mybatisPlus实现
     *
     * @param page
     * @param size
     * @return
     */
    @Override
    public PageDTO<Item> pagingQuery(Integer page, Integer size) {
        //设置当前页和页面大小
        Page<Item> page1 = new Page<>(page, size);
        page1 = page(page1);
        //创建返回参数的类
        PageDTO<Item> pageDTO = new PageDTO<>();
        //将查询到的数据set进返回参数
        pageDTO.setTotal(page1.getTotal());
        pageDTO.setList(page1.getRecords());
        //返回
        return pageDTO;
    }

    /**
     * 根据id查询数据
     *
     * @param id
     * @return
     */
    @Override
    public Item CommodityInquiry(Long id) {
        Item item = itemMapper.selectById(id);
        return item;
    }

    /**
     * 新增商品
     *
     * @param item
     */
    @Override
    public void AddingItems(Item item) {
        itemMapper.insert(item);

        // 新增商品完成,发送MQ消息
        rabbitTemplate.convertAndSend(MqConstant.HMALL_EXCHANGE,MqConstant.HMALL_INSERT_KEY,item.getId());
    }

    /**
     * 商品上下架
     *
     * @param id
     * @param status
     */
    @Override
    public void ChangingState(Long id, Integer status) {
        Item item = new Item();
        item.setId(id);
        item.setStatus(status);
        itemMapper.updateById(item);

        // 修改商品完成,发送MQ消息
        rabbitTemplate.convertAndSend(MqConstant.HMALL_EXCHANGE,MqConstant.HMALL_INSERT_KEY,item.getId());
    }

    /**
     * 修改商品
     */
    @Override
    public void amendItem(Item item) {
        itemMapper.updateById(item);

        // 修改商品完成,发送MQ消息
        rabbitTemplate.convertAndSend(MqConstant.HMALL_EXCHANGE,MqConstant.HMALL_INSERT_KEY,item.getId());
    }

    /**
     * 删除商品
     *
     * @param id
     */
    @Override
    public void deleteQuery(Long id) {
        itemMapper.deleteById(id);

        // 删除商品完成,发送MQ消息
        rabbitTemplate.convertAndSend(MqConstant.HMALL_EXCHANGE,MqConstant.HMALL_DELETE_KEY,id);
    }
}
